extends Resource
class_name 卡牌堆数据类

@export var 数据:Array[卡牌数据类]

signal 空卡牌堆被添加数据
signal 卡牌堆数据变化(_数据)

var 有卡牌被拽起:bool=false:
	set(value):
		有卡牌被拽起=value
		卡牌堆数据变化.emit(self)
	
var 所在区:卡牌区数据基类=null

func 卡牌堆为空():
	if 数据.is_empty() and not 有卡牌被拽起:
		return true
	return false
		
func 添加卡牌(卡牌数据:卡牌数据类)->bool:
	if 卡牌数据!=null and 可添加卡牌(卡牌数据):
		if 数据.is_empty() and 有卡牌被拽起==false:
			空卡牌堆被添加数据.emit()
		数据.push_back(卡牌数据)
		卡牌数据.所在堆=self
		卡牌数据.销毁信号.connect(当卡牌销毁)
		卡牌堆排序()
		卡牌堆数据变化.emit(self)
		return true
	return false
	
func 拽起卡牌():
	var 卡牌数据=null
	if !数据.is_empty():
		有卡牌被拽起=true
		卡牌数据=数据.pop_front()
		卡牌数据.销毁信号.disconnect(当卡牌销毁)
		卡牌堆数据变化.emit(self)
	return 卡牌数据	

func 获取可拖入动作(卡牌数据:卡牌数据类):
	if !数据.is_empty():
		return 数据.front().获取可拖入动作(卡牌数据)
	return null

func 获取首卡牌():
	if !数据.is_empty():
		return 数据.front()
	return null	

func 当卡牌销毁(卡牌数据:卡牌数据类):
	数据.erase(卡牌数据)
	卡牌堆数据变化.emit(self)

func 卡牌堆排序():
	var 卡牌数据=获取首卡牌()
	if 卡牌数据!=null:
		if 卡牌数据.属性列表.has("使用次数"):
			数据.sort_custom(func(a,b):return a.属性列表["使用次数"].当前值<b.属性列表["使用次数"].当前值)	
		elif 卡牌数据.属性列表.has("耐久"):
			数据.sort_custom(func(a,b):return a.属性列表["耐久"].当前值<b.属性列表["耐久"].当前值)	

func 可添加卡牌(卡牌数据:卡牌数据类):
	if  数据.is_empty() or (卡牌数据!=null and 获取首卡牌().id==卡牌数据.id):
		return true
	return false

func 包含卡牌(卡牌数据:卡牌数据类):
	if 卡牌数据!=null and not 数据.is_empty() and 获取首卡牌().id==卡牌数据.id:
		return true
	return false

func is_empty():
	return 数据.is_empty()

func 移除卡牌堆():
	var 卡牌堆数据:卡牌堆数据类=卡牌堆数据类.new()
	for i in range(数据.size()):
		var 拽起卡牌数据:卡牌数据类=移除卡牌()
		卡牌堆数据.添加卡牌(拽起卡牌数据)
		拽起卡牌数据.所在堆=self
		拽起卡牌数据.销毁信号.connect(当卡牌销毁)	
	return 卡牌堆数据
		
func 移除卡牌():
	var 卡牌数据=null
	if !数据.is_empty():
		卡牌数据=数据.pop_front()
		卡牌数据.销毁信号.disconnect(当卡牌销毁)
		卡牌堆数据变化.emit(self)
	return 卡牌数据	
